package com.hyts.agent.core;

import com.hyts.agent.base.error.AgentException;
import com.hyts.agent.exec.AgentComponentExecutor;

import java.lang.instrument.Instrumentation;

/**
 * project-name:coffice-agent
 * package-name:com.hyts.agent.core.boot
 * author:Libo/Alex
 * create-date:2019-02-14 15:42
 * copyright:libo-hyts-github
 * email:libo2dev@aliyun.com
 * description:此类主要用于: 主体agent探针的启动服务控制修改总体类的功能
 */
public class AgentLauncher {

    /**
     * 以vm参数的形式载入，在程序main方法执行之前执行
     * 其jar包的manifest需要配置属性Premain-Class
     */
    public static void premain(String agentArgs, Instrumentation instrumentation) throws AgentException {
        //初始化日志探针组件功能实现
        AgentComponentExecutor.executeAgentLogger();
        //api操作
        AgentComponentExecutor agentSPIHelper = new AgentComponentExecutor();
        //执行初始化参数处理操作服务
        agentSPIHelper.executeReloadArgs(agentArgs);
        //执行加载参数处理操作服务
        agentSPIHelper.executeInitializeArgs(agentArgs);
        //执行转换操作字节码控制spi处理开发操作
        agentSPIHelper.executeClassTransformeByBuddy(instrumentation);
    }

    /**
     * 以Attach的方式载入，在Java程序启动后执行
     * 其jar包的manifest需要配置属性Agent-Class
     */
    public static void agentmain(String agentArgs, Instrumentation instrumentation){
        premain(agentArgs,instrumentation);
    }

}
